#include<iostream>
#include<vector>
#include<map>
#include <unordered_map>
using namespace std;

class Solution {
public:
    vector<int> findSubstring(string s, vector<string>& words) {
        vector<int> v;
        unordered_map<string,int> hash1;
        for(auto& s : words) hash1[s]++; // 保存 worlds 中所有单词的频次

        int len = words[0].size(),n = words.size();
        for(int i = 0; i < len; i++) // 执行len次滑动窗口
        {
            unordered_map<string,int> hash2; // 记录窗口内所有单词的频次
            for(int left=i,right=i,count=0; right+len <= s.size(); right+=len)
            {
                // 进窗口，维护count。 count：窗口内有效单词的个数
                string in = s.substr(right,len);
                hash2[in]++;
                if(hash2[in]<=hash1[in]) count++;

                // 出窗口，维护count
                if(right-left+1 > n*len)
                {
                    string out = s.substr(left,len);
                    if(hash2[out]<=hash1[out]) count--;
                    hash2[out]--;
                    left+=len;
                }
                // 更新结果
                if(count == n) v.push_back(left);
            }
        }
        return v;
    }
};

int main()
{

	return 0;
}
